
account = {
    "is_authenticated":False, # 用户登录这个就把这个改成True
    "username":"Alex", # 假装这是DB里存的用户信息
    "password":"abc123" # 假装这是DB里存的用户信息
}

def login(func):

    def inner(*args,**kwargs):
        if account["is_authenticated"] is False:
            username = input("user:")
            password = input("password:")

            if username == account["username"] and password == account["password"]:
                print("welcome login...")
                account["is_authenticated"] = True
                func(*args,**kwargs) # 认证成功，执行该功能函数
            else:
                print("wrong username or password!")

        else:
            print("用户已登录，验证通过...")
            func(*args, **kwargs)  # 认证成功，执行该功能函数

    return inner

def home():
    print("----首页----")

# @paymoney 支持多层装饰器，按顺序执行
@login # 装饰器，语法糖 实现原理：america = login(america) # inner 的内存地址
def america():
    # login() # 执行前加上认证
    print("----欧美专区----")

@login
def japan():
    print("----日韩专区----")

@login
def henan(vip_level):
    # login()  # 执行前加上认证
    if vip_level > 3:
        print("解锁本专区所有高级玩法")
    else:
        print("----河南专区vip----")

# login(america) # 需要验证 就用 login，把需要验证的功能，当作一个参数传给login
# login(henan)
# america = login(america) # inner 的内存地址
# henan = login(henan)
# america() # 相当于 inner()
# print(america)

home()
america() 
japan()
henan(4)